package q1.project.core.base;

import lombok.Getter;
import lombok.Setter;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

/**
 * 分页查询基础类 统一分页参数
 *
 * @author Q1 Team
 * @version 1.0
 */
@Getter
@Setter
public class PageQuery {

  /** 当前页码（从0开始） */
  private Integer page = 0;

  /** 每页大小 */
  private Integer size = 20;

  /** 排序字段 */
  private String sortBy = "createTime";

  /** 排序方向：asc-升序, desc-降序 */
  private String sortOrder = "desc";

  /** 搜索关键词 */
  private String keyword;

  /** 获取Pageable对象 */
  public Pageable toPageable() {
    Sort sort =
        "asc".equalsIgnoreCase(sortOrder)
            ? Sort.by(sortBy).ascending()
            : Sort.by(sortBy).descending();
    return PageRequest.of(page, size, sort);
  }

  /** 获取Pageable对象（自定义排序） */
  public Pageable toPageable(Sort sort) {
    return PageRequest.of(page, size, sort);
  }

  /** 校验参数 */
  public void validate() {
    if (page < 0) {
      page = 0;
    }
    if (size < 1) {
      size = 20;
    }
    if (size > 100) {
      size = 100; // 最大每页100条
    }
  }
}
